package com.itheima.demo2.ZengDemo2;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @ClassName test2
 * @Author 16799
 * @Date 2025/9/29 17:36
 * @Version 1.0
 * @Description TODO
 **/
public class test2 {
    public static void main(String[] args) {
        Map<String, List<String>> selects = new HashMap<>();
        List<String> location1 = new ArrayList<>();
        Collections.addAll(location1,"农家乐","野外拓展","轰趴");
        selects.put("张全蛋儿",location1);

        List<String> location2 = new ArrayList<>();
        //他妈的，这里写错了，少写了个双引号
        //Collections.addAll(location2,"轰趴，野外扩展","健身房");
        Collections.addAll(location2,"轰趴","野外拓展","健身房");
        selects.put("李二狗子",location2);

        List<String> location3 = new ArrayList<>();
        Collections.addAll(location3,  "野外拓展", "轰趴");
        selects.put("翠花", location3);

        List<String> location4 = new ArrayList<>();
        Collections.addAll(location4, "健身房");
        selects.put("小帅", location4);

        List<String> location5 = new ArrayList<>();
        Collections.addAll(location5, "农家乐");
        selects.put("有容", location5);

        System.out.println(selects);

        System.out.println("----------先统计每个去处选择的人数---------");
        /*
        自己照着写的代码输出结果是这样的，有问题啊：
        {张全蛋儿=[农家乐, 野外扩展, 轰趴], 有容=[农家乐], 李二狗子=[轰趴，野外扩展, 健身房], 小帅=[健身房], 翠花=[野外拓展, 轰趴]}
        ----------先统计每个去处选择的人数---------
        {轰趴，野外扩展=1, 轰趴=2, 野外扩展=1, 健身房=2, 野外拓展=1, 农家乐=2}
         */
/*
        Map<String,Integer> inf = new HashMap<>();
        selects.forEach((name,datas)->{
            for (String data : datas) {
                inf.put(data,inf.containsKey(data) ? inf.get(data)+1 : 1);
            }
        });
        System.out.println(inf);
*/
        Map<String, Integer> infos = new HashMap<>();
        //遍历封装有全部去处和人名的map集合，得到map的value值集合
        selects.forEach((name, datas) -> {
            //再遍历值集合，然后把各个去处的人数添加到infos集合里面
            for (String data : datas) {
                //infos.get(data) infos集合根据去处的键，获取人数的值
                infos.put(data, infos.containsKey(data) ? infos.get(data) + 1 : 1);
                System.out.println(infos);
            }
        });
        System.out.println(infos);
        //复制过来的这段代码还是不行，哪里出问题了？？  是我前面放内容到map集合的时候写错了，玛德最后还是debug的时候发现的

        System.out.println("----找出最多人想去的地方-----------");
        Map.Entry<String, Integer> entry = infos.entrySet().stream().max((o1, o2) -> o1.getValue() - o2.getValue()).get();
        System.out.println(entry);

        List<String> locations = infos.entrySet().stream().filter(e -> e.getValue() == entry.getValue())
                .map(e -> e.getKey()).collect(Collectors.toList());
        System.out.println(locations);

        System.out.println("-------找出哪些人不想去去处最多的地方------");
        selects.entrySet().stream().filter(e->{
            boolean flag = true;
            for (String s : e.getValue()) {
                if (locations.contains(s)){
                    flag = false;
                    break;
                }
            }
            return flag;
        }).forEach(s-> System.out.println(s.getKey()));
    }
}
